home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 051-060 / amok56 / gadtoolsdemo / gadtoolsdemo.mod < prev    next >
Text File  |  1993-11-04  |  19KB  |  685 lines

  1. (*---------------------------------------------------------------------------
  2.  :Program.      GadToolsDemo.mod
  3.  :Author.       Fridtjof Siebert
  4.  :Address.      Nobileweg 67, D-7000 Stuttgart 40
  5.  :Shortcut.     [fbs]
  6.  :Copyright.    PD
  7.  :Language.     Oberon
  8.  :Translator.   Amiga Oberon Compiler V2.01
  9.  :History.      V1.0 05-May-91: ported C-Demo to Oberon [fbs]
  10.  :Contents.     demostrates use of gadtools.library in Oberon
  11. ---------------------------------------------------------------------------*)
  12.  
  13. MODULE GadToolsDemo;
  14.  
  15. IMPORT e  : Exec,
  16.        I  : Intuition,
  17.        g  : Graphics,
  18.        u  : Utility,
  19.        gt : GadTools,
  20.        es : ExecSupport,
  21.        d  : Dos,
  22.             io,
  23.        sys: SYSTEM;
  24.  
  25. CONST
  26.   gadBUTTON      = 1;
  27.   gadINTEGER     = 2;
  28.   gadCHECKBOX1   = 3;
  29.   gadCHECKBOX2   = 4;
  30.   gadCYCLE       = 5;
  31.   gadMX          = 6;
  32.   gadSLIDER      = 7;
  33.   gadSCROLLER    = 8;
  34.   gadLVSTRING    = 9;
  35.   gadLISTVIEW    = 10;
  36.   gadPALETTE     = 11;
  37.  
  38.   menuFOOSET     = 1;
  39.   menuFOOCLEAR   = 2;
  40.   menuFOOTOGGLE  = 3;
  41.   menuINCREASE   = 4;
  42.   menuDECREASE   = 5;
  43.   menuBY1        = 6;
  44.   menuBY5        = 7;
  45.   menuBY10       = 8;
  46.   menuCONNECTED  = 9;
  47.   menuNEVER      = 10;
  48.  
  49. TYPE
  50.   TwentysixNewMenus = ARRAY 26 OF gt.NewMenu;
  51.  
  52. CONST
  53.   myNewMenuConst = TwentysixNewMenus(
  54.     gt.title, sys.ADR("Project"),       NIL,          {},                       LONGSET{}, NIL,
  55.     gt.item , sys.ADR("Open..."),       sys.ADR("O"), {},                       LONGSET{}, NIL,
  56.     gt.item,  sys.ADR("Save"),          NIL,          {},                       LONGSET{}, NIL,
  57.     gt.item , sys.ADR("Save As..."),    NIL,          {},                       LONGSET{}, NIL,
  58.     gt.item , gt.barLabel,              NIL,          {},                       LONGSET{}, NIL,
  59.     gt.item , sys.ADR("Print"),         NIL,          {},                       LONGSET{}, NIL,
  60.     gt.sub  , sys.ADR("NLQ"),           NIL,          {},                       LONGSET{}, NIL,
  61.     gt.sub  , sys.ADR("Draft"),         NIL,          {},                       LONGSET{}, NIL,
  62.     gt.item , gt.barLabel,              NIL,          {},                       LONGSET{}, NIL,
  63.     gt.item , sys.ADR("Quit..."),       sys.ADR("Q"), {},                       LONGSET{}, NIL,
  64.  
  65.     gt.title, sys.ADR("Gadgets"),       NIL,          {},                       LONGSET{}, NIL,
  66.     gt.item , sys.ADR("Foo"),           NIL,          {},                       LONGSET{}, NIL,
  67.     gt.sub  , sys.ADR("Set"),           sys.ADR("S"), {},                       LONGSET{}, menuFOOSET,
  68.     gt.sub  , sys.ADR("Clear"),         sys.ADR("C"), {},                       LONGSET{}, menuFOOCLEAR,
  69.     gt.sub  , sys.ADR("Toggle"),        sys.ADR("T"), {},                       LONGSET{}, menuFOOTOGGLE,
  70.     gt.item , sys.ADR("Slider"),        NIL,          {},                       LONGSET{}, NIL,
  71.     gt.sub  , sys.ADR("Increase"),      sys.ADR("I"), {},                       LONGSET{}, menuINCREASE,
  72.     gt.sub  , sys.ADR("Decrease"),      sys.ADR("D"), {},                       LONGSET{}, menuDECREASE,
  73.     gt.sub  , gt.barLabel,              NIL,          {},                       LONGSET{}, NIL,
  74.     gt.sub  , sys.ADR("By 1s"),         NIL,          {I.checkIt,I.checked},   -LONGSET{3},menuBY1,
  75.     gt.sub  , sys.ADR("By 5s"),         NIL,          {I.checkIt},             -LONGSET{4},menuBY5,
  76.     gt.sub  , sys.ADR("By 10s"),        NIL,          {I.checkIt},             -LONGSET{5},menuBY10,
  77.     gt.item , sys.ADR("MX Gadgets"),    NIL,          {},                       LONGSET{}, NIL,
  78.     gt.sub  , sys.ADR("Connected?"),    NIL,          {I.checkIt,I.menuToggle}, LONGSET{}, menuCONNECTED,
  79.     gt.item , sys.ADR("Not Me!"),       NIL,          {gt.itemDisabled},        LONGSET{}, menuNEVER,
  80.  
  81.     gt.end  , NIL,                      NIL,          {},                       LONGSET{}, NIL);
  82.  
  83.   myNewWinConst = I.NewWindow(
  84.     0, 0,               (*  LeftEdge, TopEdge *)
  85.     600, 166,           (*  Width, Height *)
  86.     -1, -1,             (*  DetailPen, BlockPen *)
  87.     LONGSET{I.menuPick,I.mouseButtons,I.gadgetUp, I.gadgetDown, I.mouseMove,
  88.         I.closeWindow,I.refreshWindow,I.intuiTicks}, (*  IDCMPFlags *)
  89.     LONGSET{I.activate,I.windowDrag,I.windowSizing,I.windowDepth,
  90.         I.windowClose}, (* Flags *)
  91.     NIL,                (*  FirstGadget *)
  92.     NIL,                (*  CheckMark *)
  93.     sys.ADR("Fancy GadTools Demo"),      (*  Title *)
  94.     NIL,                (*  Screen *)
  95.     NIL,                (*  BitMap *)
  96.     50, 50,             (*  MinWidth, MinHeight *)
  97.     640, 200,           (*  MaxWidth, MaxHeight *)
  98.     {I.wbenchScreen});  (*  Type *)
  99.  
  100.   Topaz80Const = g.TextAttr(
  101.     sys.ADR("topaz.font"),       (*  Name *)
  102.     8,                  (*  YSize *)
  103.     SHORTSET{},         (*  Style *)
  104.     SHORTSET{});        (*  Flags *)
  105.  
  106. TYPE
  107.   ThirteenMonths = ARRAY 13 OF e.STRPTR;
  108.   EightDays = ARRAY 8 OF e.STRPTR;
  109.  
  110. CONST
  111.   monthLabels =  ThirteenMonths( sys.ADR("January"), sys.ADR("February"), sys.ADR("March"),
  112.     sys.ADR("April"), sys.ADR("May"), sys.ADR("June"), sys.ADR("July"), sys.ADR("August"),
  113.     sys.ADR("September"), sys.ADR("October"), sys.ADR("November"), sys.ADR("December"), NIL);
  114.  
  115.   dayLabels = EightDays(
  116.     sys.ADR("Monday"), sys.ADR("Tuesday"), sys.ADR("Wednesday"), sys.ADR("Thursday"),
  117.     sys.ADR("Friday"), sys.ADR("Saturday"), sys.ADR("Sunday"), NIL);
  118.  
  119. VAR lh: e.List;
  120.  
  121.   font: g.TextFontPtr;
  122.   mysc: I.ScreenPtr;
  123.   rkey: I.RememberPtr;
  124.   glist: I.GadgetPtr;
  125.   menu: I.MenuPtr;
  126.   mywin: I.WindowPtr;
  127.   vi: e.APTR;
  128.   terminated: BOOLEAN;
  129.   topaz80: g.TextAttr;
  130.   myNewMenu: TwentysixNewMenus;
  131.   myNewWin: I.NewWindow;
  132.  
  133. VAR
  134.   sliderlevel: INTEGER;
  135.   incr: INTEGER;
  136.   integergad, mxgad, checkgad,
  137.   slidergad, cyclegad, lvgad, stringgad: I.GadgetPtr;
  138.   foochecked: BOOLEAN;
  139.   connected: BOOLEAN;
  140.  
  141.   imsg: I.IntuiMessagePtr;
  142.   gad: I.GadgetPtr;
  143.   imsgClass: LONGSET;
  144.   imsgCode: INTEGER;
  145.   topborder: INTEGER;
  146.  
  147. CONST
  148.   sliderMin = 0;
  149.   sliderMax = 49;
  150.  
  151. PROCEDURE BailOut(error: ARRAY OF CHAR);
  152.  
  153. BEGIN
  154.   d.PrintF("Error: %s\n", sys.ADR(error));
  155.   HALT(20);
  156. END BailOut;
  157.  
  158. PROCEDURE HandleMenuEvent(code: INTEGER): BOOLEAN;
  159.  
  160. TYPE
  161.   MyProc = PROCEDURE(code: INTEGER): BOOLEAN;
  162.  
  163. VAR
  164.   item: I.MenuItemPtr;
  165.   terminated: BOOLEAN;
  166.   fptr: MyProc;
  167.  
  168. BEGIN
  169.   terminated := FALSE;
  170.  
  171.   d.PrintF("MENUPICK.  ");
  172.   WHILE (code # I.menuNull) AND ~ terminated DO
  173.     item := I.ItemAddress(menu^, code);
  174.     IF I.MenuNum(code) = 0 THEN
  175.       fptr := sys.VAL(MyProc,gt.MenuItemUserData(item));
  176.       IF fptr # NIL THEN
  177.         terminated := fptr(code);
  178.       END;
  179.     ELSE
  180.       CASE gt.MenuItemUserData(item) OF
  181.       menuFOOSET:
  182.         d.PrintF("Foo Set.  ");
  183.         gt.SetGadgetAttrs(checkgad^, mywin, NIL,
  184.             gt.cbChecked, I.LTRUE,
  185.             u.done);
  186.         foochecked := TRUE |
  187.  
  188.       menuFOOCLEAR:
  189.         d.PrintF("Foo Clear.  ");
  190.         gt.SetGadgetAttrs(checkgad^, mywin, NIL,
  191.             gt.cbChecked, I.LFALSE,
  192.             u.done);
  193.         foochecked := FALSE |
  194.  
  195.       menuFOOTOGGLE:
  196.         d.PrintF("Foo Toggle.  ");
  197.         foochecked := ~ foochecked;
  198.         IF foochecked THEN
  199.           gt.SetGadgetAttrs(checkgad^, mywin, NIL, gt.cbChecked, I.LTRUE, u.done)
  200.         ELSE
  201.           gt.SetGadgetAttrs(checkgad^, mywin, NIL, gt.cbChecked, I.LFALSE, u.done)
  202.         END |
  203.  
  204.       menuINCREASE:
  205.         d.PrintF("Slider Increase.  ");
  206.         IF sliderlevel < sliderMax THEN
  207.           INC(sliderlevel,incr);
  208.           IF sliderlevel > sliderMax THEN
  209.             sliderlevel := sliderMax;
  210.           END;
  211.           gt.SetGadgetAttrs(slidergad^, mywin, NIL, gt.slLevel, sliderlevel, u.done);
  212.         END |
  213.  
  214.       menuDECREASE:
  215.         d.PrintF("Slider Decrease.  ");
  216.         IF sliderlevel > sliderMin THEN
  217.           DEC(sliderlevel,incr);
  218.           IF sliderlevel < sliderMin THEN
  219.             sliderlevel := sliderMin
  220.           END;
  221.           gt.SetGadgetAttrs(slidergad^, mywin, NIL, gt.slLevel, sliderlevel, u.done);
  222.         END |
  223.  
  224.       menuBY1:
  225.         d.PrintF("Change Slider By 1's.  ");
  226.         incr := 1 |
  227.  
  228.       menuBY5:
  229.         d.PrintF("Change Slider By 5's.  ");
  230.         incr := 5 |
  231.  
  232.       menuBY10:
  233.         d.PrintF("Change Slider By 10's.  ");
  234.         incr := 10 |
  235.  
  236.       menuCONNECTED:
  237.         d.PrintF("MX Gadgets Connected?");
  238.         connected := (I.checked IN item.flags) |
  239.  
  240.       menuNEVER:
  241.         d.PrintF("Can't Get Me!  ") |
  242.  
  243.       ELSE END;
  244.  
  245.     END;
  246.     code := item.nextSelect;
  247.  
  248.   END;
  249.  
  250.   d.PrintF("\n");
  251.  
  252.   RETURN terminated;
  253.  
  254. END HandleMenuEvent;
  255.  
  256. PROCEDURE * OpenFunc(code: INTEGER): BOOLEAN;
  257.  
  258. BEGIN
  259.   d.PrintF("Called Open Function.  ");
  260.   RETURN FALSE;
  261. END OpenFunc;
  262.  
  263. PROCEDURE * SaveFunc(code: INTEGER): BOOLEAN;
  264.  
  265. BEGIN
  266.   d.PrintF("Called Save Function.  ");
  267.   RETURN FALSE;
  268. END SaveFunc;
  269.  
  270. PROCEDURE * SaveAsFunc(code: INTEGER): BOOLEAN;
  271.  
  272. BEGIN
  273.   d.PrintF("Called SaveAs Function.  ");
  274.   RETURN FALSE;
  275. END SaveAsFunc;
  276.  
  277. PROCEDURE * PrintFunc(code: INTEGER): BOOLEAN;
  278.  
  279. BEGIN
  280.   d.PrintF("Called Print Function - ");
  281.   IF I.SubNum(code)=0 THEN
  282.     d.PrintF("NLQ.  ");
  283.   ELSE
  284.     d.PrintF("Draft.  ");
  285.   END;
  286.   RETURN FALSE;
  287. END PrintFunc;
  288.  
  289. PROCEDURE * QuitFunc(code: INTEGER): BOOLEAN;
  290.  
  291. BEGIN
  292.   d.PrintF("Called Quit Function.  ");
  293.   RETURN TRUE;
  294. END QuitFunc;
  295.  
  296. PROCEDURE HandleMouseMove(gad: I.GadgetPtr; code: INTEGER): BOOLEAN;
  297.  
  298. VAR
  299.   terminated: BOOLEAN;
  300.  
  301. BEGIN
  302.  
  303.   terminated := FALSE;
  304.  
  305.   d.PrintF("MOUSEMOVE.  ");
  306.   CASE gad.gadgetID OF
  307.  
  308.   gadSLIDER:
  309.     d.PrintF("Slider Level: %ld\n", code);
  310.     sliderlevel := code |
  311.  
  312.   gadSCROLLER:
  313.     d.PrintF("Scroller Level: %ld\n", code) |
  314.  
  315.   ELSE END;
  316.  
  317.   RETURN terminated;
  318.  
  319. END HandleMouseMove;
  320.  
  321. PROCEDURE HandleGadgetEvent(gad: I.GadgetPtr; code: INTEGER): BOOLEAN;
  322.  
  323. VAR
  324.   terminated: BOOLEAN;
  325.   strinfo: I.StringInfoPtr;
  326.  
  327. BEGIN
  328.  
  329.   terminated := FALSE;
  330.  
  331.  
  332.   CASE gad.gadgetID OF
  333.   gadBUTTON:
  334.       d.PrintF("Button 'ClickMe'.\n");
  335.       gt.SetGadgetAttrs(integergad^, mywin, NIL,
  336.           gt.inNumber, 271828,
  337.           u.done) |
  338.  
  339.   gadINTEGER:
  340.       strinfo := gad.specialInfo;
  341.       d.PrintF("Integer gadget: %ld.\n",strinfo.longInt) |
  342.  
  343.   gadCHECKBOX1:
  344.       d.PrintF("Foo is ");
  345.       IF ~ (I.selected IN gad.flags) THEN
  346.  
  347.         foochecked := FALSE;
  348.         d.PrintF("not ");
  349.  
  350.       ELSE
  351.  
  352.         foochecked := TRUE;
  353.  
  354.       END;
  355.  
  356.       d.PrintF("selected.\n") |
  357.  
  358.   gadCHECKBOX2:
  359.       d.PrintF("Bar is ");
  360.       IF ~ (I.selected IN gad.flags) THEN
  361.         d.PrintF("not ")
  362.       END;
  363.       d.PrintF("selected.\n") |
  364.  
  365.   gadCYCLE:
  366.       d.PrintF("Cycle: '%s'.\n", monthLabels[code]);
  367.       IF connected AND (code < 7) THEN
  368.         gt.SetGadgetAttrs(mxgad^, mywin, NIL, gt.mxActive, code, u.done)
  369.       END |
  370.  
  371.   gadMX:
  372.       d.PrintF("MX: Day-of-week '%s'\n", dayLabels[code]);
  373.       IF connected THEN
  374.           gt.SetGadgetAttrs(cyclegad^, mywin, NIL, gt.cyActive, code, u.done)
  375.       END |
  376.  
  377.   gadSLIDER:
  378.       d.PrintF("Slider Level: %ld\n", code);
  379.       sliderlevel := code;
  380.       IF (sliderlevel >= 0) AND (sliderlevel <= 12) THEN
  381.  
  382.         gt.SetGadgetAttrs(lvgad^, mywin, NIL, gt.lvSelected, code, u.done);
  383.  
  384.       END |
  385.  
  386.   gadSCROLLER:
  387.       d.PrintF("Scroller Level: %ld\n", code) |
  388.  
  389.   gadPALETTE:
  390.       d.PrintF("Palette:  selected color %ld\n", code) |
  391.  
  392.   gadLVSTRING:
  393.       strinfo := gad.specialInfo;
  394.       d.PrintF("LVString: '%s'.\n",strinfo.buffer) |
  395.  
  396.   gadLISTVIEW:
  397.       d.PrintF("ListView: clicked on '%s'\n", monthLabels[code]) |
  398.  
  399.   ELSE END;
  400.  
  401.   RETURN terminated;
  402.  
  403. END HandleGadgetEvent;
  404.  
  405. PROCEDURE CreateAllGadgets(VAR glist: I.GadgetPtr; vi: e.APTR; topborder: INTEGER): BOOLEAN;
  406.  
  407. VAR
  408.   ng: gt.NewGadget;
  409.   gad: I.GadgetPtr;
  410.   index: INTEGER;
  411.   node: e.NodePtr;
  412.  
  413. BEGIN
  414.  
  415.   gad := gt.CreateContext(glist);
  416.   ng.leftEdge := 300;
  417.   ng.topEdge := 4+topborder;
  418.   ng.width := 0;
  419.   ng.height := 8;
  420.   ng.gadgetText := sys.ADR("Gadget Toolkit Test");
  421.   ng.textAttr := sys.ADR(topaz80);
  422.   ng.gadgetID := 0;
  423.   ng.flags := LONGSET{gt.placeTextIn,gt.highLabel};
  424.   ng.visualInfo := vi;
  425.   gad := gt.CreateGadget(gt.textKind, gad, ng, u.done);
  426.  
  427.   ng.leftEdge := 10;
  428.   ng.topEdge := 19+topborder;
  429.   ng.width := 100;
  430.   ng.height := 12;
  431.   ng.gadgetText := sys.ADR("ClickMe");
  432.   ng.gadgetID := gadBUTTON;
  433.   ng.flags := LONGSET{};
  434.   gad := gt.CreateGadget(gt.buttonKind, gad, ng, u.done);
  435.  
  436.   ng.leftEdge := 400;
  437.   ng.height := 14;
  438.   ng.gadgetText := sys.ADR("Month:");
  439.   ng.gadgetID := gadCYCLE;
  440.   ng.flags := LONGSET{gt.highLabel};
  441.   gad := gt.CreateGadget(gt.cycleKind, gad, ng,
  442.                   gt.cyLabels, sys.ADR(monthLabels),
  443.                   gt.cyActive, 3,
  444.                   u.done);
  445.   cyclegad := gad;
  446.  
  447.   ng.topEdge := 69+topborder;
  448.   ng.leftEdge := 70;
  449.   ng.gadgetText := sys.ADR("Foo:");
  450.   ng.gadgetID := gadCHECKBOX1;
  451.   gad := gt.CreateGadget(gt.checkBoxKind, gad, ng,
  452.                   gt.cbChecked, sys.VAL(SHORTINT,foochecked), u.done);
  453.   checkgad := gad;
  454.  
  455.   IF gad#NIL THEN
  456.     INC(ng.topEdge,gad.height);
  457.   END;
  458.  
  459.   ng.gadgetText := sys.ADR("Bar:");
  460.   ng.gadgetID := gadCHECKBOX2;
  461.   gad := gt.CreateGadget(gt.checkBoxKind, gad, ng, gt.cbChecked, I.LFALSE, u.done);
  462.  
  463.   ng.topEdge := 99+topborder;
  464.   ng.width := 200;
  465.   ng.gadgetText := sys.ADR("Type:");
  466.   ng.gadgetID := gadINTEGER;
  467.   gad := gt.CreateGadget(gt.integerKind, gad, ng,
  468.                   gt.inNumber, 54321,
  469.                   gt.inMaxChars, 10,
  470.                   u.done);
  471.   integergad := gad;
  472.  
  473.   ng.topEdge := 117+topborder;
  474.   ng.height := 12;
  475.   ng.gadgetText := sys.ADR("L:   ");
  476.   ng.gadgetID := gadSLIDER;
  477.   gad := gt.CreateGadget(gt.sliderKind, gad, ng,
  478.                   gt.slMin, sliderMin,
  479.                   gt.slMax, sliderMax,
  480.                   gt.slLevel, sliderlevel,
  481.                   gt.slLevelFormat, sys.ADR("%2ld"),
  482.                   gt.slLevelPlace,sys.VAL(LONGINT,LONGSET{gt.placeTextLeft}),
  483.                   gt.slMaxLevelLen, 2,
  484.                   I.gaImmediate, I.LTRUE,
  485.                   I.gaRelVerify, I.LTRUE,
  486.                   u.done);
  487.   slidergad := gad;
  488.  
  489.   ng.topEdge := 133+topborder;
  490.   ng.gadgetText := sys.ADR("Scroll:");
  491.   ng.gadgetID := gadSCROLLER;
  492.   gad := gt.CreateGadget(gt.scrollerKind, gad, ng,
  493.                   gt.scTop, 5,
  494.                   gt.scTotal, 30,
  495.                   gt.scVisible, 10,
  496.                   gt.scArrows, 13,
  497.                   I.gaRelVerify, I.LTRUE,
  498.                   u.done);
  499.  
  500.   ng.topEdge := 149+topborder;
  501.   ng.height := 8;
  502.   ng.gadgetText := sys.ADR("Number:");
  503.   gad := gt.CreateGadget(gt.numberKind, gad, ng,
  504.                   gt.nmNumber, 314159,
  505.                   u.done);
  506.  
  507.   ng.leftEdge := 400;
  508.   ng.gadgetText := sys.ADR("Read:");
  509.   gad := gt.CreateGadget(gt.textKind, gad, ng,
  510.                   gt.txText, sys.ADR("Read-Only Field!"),
  511.                   u.done);
  512.  
  513.   ng.leftEdge := 470;
  514.   ng.topEdge := 49+topborder;
  515.   ng.gadgetID := gadMX;
  516.   gad := gt.CreateGadget(gt.mxKind, gad, ng,
  517.                   gt.mxLabels, sys.ADR(dayLabels),
  518.                   gt.mxActive, 0,
  519.                   gt.mxSpacing, 4,
  520.                   u.done);
  521.   mxgad := gad;
  522.  
  523.   es.NewList(lh);
  524.   index := 0;
  525.   WHILE monthLabels[index]#NIL DO
  526.     NEW(node);
  527.     node.name := monthLabels[index];
  528.     INC(index);
  529.     e.AddTail(lh, node);
  530.   END;
  531.  
  532.   ng.width := 150;
  533.   ng.height := 14;
  534.   ng.gadgetText := NIL;
  535.   ng.gadgetID := gadLVSTRING;
  536.   gad := gt.CreateGadget(gt.stringKind, gad, ng,
  537.                   gt.stMaxChars, 50,
  538.                   u.done);
  539.   stringgad := gad;
  540.  
  541.   ng.leftEdge := 130;
  542.   ng.topEdge := 19+topborder;
  543.   ng.width := 150;
  544.   ng.height := 57;
  545.   ng.gadgetText := sys.ADR("Months:");
  546.   ng.gadgetID := gadLISTVIEW;
  547.   ng.flags := LONGSET{gt.highLabel,gt.placeTextLeft};
  548.   gad := gt.CreateGadget(gt.listViewKind, gad, ng,
  549.                   gt.lvLabels, sys.ADR(lh),
  550.                   gt.lvTop, 1,
  551.                   I.layoutaSpacing, 1,
  552.                   gt.lvShowSelected, stringgad,
  553.                   gt.lvSelected, 3,
  554.                   gt.lvScrollWidth, 18,
  555.                   u.done);
  556.   lvgad := gad;
  557.  
  558.   ng.leftEdge := 320;
  559.   ng.topEdge := 49+topborder;
  560.   ng.width := 40;
  561.   ng.height := 75;
  562.   ng.gadgetText := sys.ADR("Colors");
  563.   ng.gadgetID := gadPALETTE;
  564.   ng.flags := LONGSET{gt.highLabel};
  565.  
  566.   gad := gt.CreateGadget(gt.paletteKind, gad, ng,
  567.                   gt.paDepth, mysc.bitMap.depth,
  568.                   gt.paColor, 1,
  569.                   gt.paColorOffset, 0,
  570.                   gt.paIndicatorHeight, 15,
  571.                   u.done);
  572.  
  573.   RETURN gad#NIL;
  574.  
  575. END CreateAllGadgets;
  576.  
  577. BEGIN
  578.   sliderlevel := 7;
  579.   incr := 1;
  580.   foochecked := TRUE;
  581.   connected := FALSE;
  582.   terminated := FALSE;
  583.   topaz80 := Topaz80Const;
  584.   myNewWin := myNewWinConst;
  585.   myNewMenu := myNewMenuConst;
  586.   myNewMenu[1].userData := sys.VAL(LONGINT,OpenFunc);
  587.   myNewMenu[2].userData := sys.VAL(LONGINT,SaveFunc);
  588.   myNewMenu[3].userData := sys.VAL(LONGINT,SaveAsFunc);
  589.   myNewMenu[6].userData := sys.VAL(LONGINT,PrintFunc);
  590.   myNewMenu[7].userData := sys.VAL(LONGINT,PrintFunc);
  591.   myNewMenu[9].userData := sys.VAL(LONGINT,QuitFunc);
  592.   IF (I.int.libNode.version<36) THEN BailOut("Requires KickStart V2.0") END;
  593.   font := g.OpenFont(topaz80);
  594.   IF font=NIL THEN BailOut("Failed to open font") END;
  595.  
  596.   mysc := I.LockPubScreen(NIL);
  597.   IF mysc=NIL THEN BailOut("Couldn't lock default public screen") END;
  598.  
  599.   vi := gt.GetVisualInfo(mysc,u.done);
  600.   IF vi=NIL THEN BailOut("GetVisualInfo() failed") END;
  601.  
  602.   topborder := mysc.wBorTop + mysc.font.ySize + 1;
  603.   menu := gt.CreateMenus(myNewMenu,gt.mnFrontPen,0,u.done);
  604.   IF menu=NIL THEN BailOut("CreateMenus() failed") END;
  605.  
  606.   IF ~ gt.LayoutMenus(menu, vi,u.done) THEN BailOut("LayoutMenus() failed") END;
  607.  
  608.   IF ~ CreateAllGadgets(glist,vi,topborder) THEN
  609.     BailOut("CreateAllGadgets() failed");
  610.   END;
  611.   mywin := I.OpenWindowTags(myNewWin,
  612.                             I.waInnerHeight,myNewWin.height,
  613.                             I.waAutoAdjust, I.LTRUE,
  614.                             I.waPubScreen,  mysc,
  615.                             u.done);
  616.   IF mywin = NIL THEN BailOut("OpenWindow() failed") END;
  617.   IF I.AddGList(mywin, glist, -1, -1, NIL)=0 THEN END;
  618.   I.RefreshGList(glist, mywin, NIL, -1);
  619.   gt.RefreshWindow(mywin, NIL);
  620.  
  621.   IF I.SetMenuStrip(mywin, menu^) THEN END;
  622.  
  623.   WHILE ~ terminated DO
  624.     REPEAT UNTIL e.Wait (LONGSET{mywin.userPort.sigBit})#LONGSET{};
  625.     LOOP
  626.       IF terminated THEN EXIT END;
  627.       imsg := gt.GetIMsg(mywin.userPort);
  628.       IF imsg=NIL THEN EXIT END;
  629.       imsgClass := imsg.class;
  630.       imsgCode := imsg.code;
  631.       gad := imsg.iAddress;
  632.       gt.ReplyIMsg(imsg);
  633.       IF I.menuPick IN imsgClass THEN
  634.         terminated := HandleMenuEvent(imsgCode);
  635.       END;
  636.  
  637.       IF I.mouseMove IN imsgClass THEN
  638.         terminated := HandleMouseMove(gad, imsgCode);
  639.       END;
  640.  
  641.       IF I.gadgetUp IN imsgClass THEN
  642.         d.PrintF("GADGETUP.  ");
  643.         terminated := HandleGadgetEvent(gad, imsgCode);
  644.       END;
  645.  
  646.       IF I.gadgetDown IN imsgClass THEN
  647.         d.PrintF("GADGETDOWN.  ");
  648.         terminated := HandleGadgetEvent(gad, imsgCode);
  649.       END;
  650.  
  651.       IF I.closeWindow IN imsgClass THEN
  652.         d.PrintF("CLOSEWINDOW.\n");
  653.         terminated := TRUE;
  654.       END;
  655.  
  656.       IF I.refreshWindow IN imsgClass THEN
  657.         d.PrintF("REFRESHWINDOW.\n");
  658.         gt.BeginRefresh(mywin);
  659.         gt.EndRefresh(mywin, I.LTRUE);
  660.       END;
  661.     END;
  662.   END;
  663.  
  664. CLOSE
  665.   IF mywin#NIL THEN
  666.     I.ClearMenuStrip(mywin);
  667.     I.CloseWindow(mywin);
  668.   END;
  669.  
  670.   gt.FreeMenus(menu);
  671.   gt.FreeVisualInfo(vi);
  672.   gt.FreeGadgets(glist);
  673.  
  674.  
  675.   IF mysc#NIL THEN
  676.     I.UnlockPubScreen(NIL, mysc);
  677.   END;
  678.  
  679.   IF font#NIL THEN
  680.     g.CloseFont(font);
  681.   END;
  682.  
  683. END GadToolsDemo.
  684.  
  685.